summaryrefslogtreecommitdiffstats
path: root/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragment.java
blob: 5799dcb8dcdc548c4fe3c570e67d1895a0ae1a9f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package org.citra.citra_emu.features.settings.ui;

import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import org.citra.citra_emu.R;
import org.citra.citra_emu.features.settings.model.Setting;
import org.citra.citra_emu.features.settings.model.Settings;
import org.citra.citra_emu.features.settings.model.view.SettingsItem;
import org.citra.citra_emu.ui.DividerItemDecoration;

import java.util.ArrayList;

public final class SettingsFragment extends Fragment implements SettingsFragmentView {
    private static final String ARGUMENT_MENU_TAG = "menu_tag";
    private static final String ARGUMENT_GAME_ID = "game_id";

    private SettingsFragmentPresenter mPresenter = new SettingsFragmentPresenter(this);
    private SettingsActivityView mActivity;

    private SettingsAdapter mAdapter;

    public static Fragment newInstance(String menuTag, String gameId) {
        SettingsFragment fragment = new SettingsFragment();

        Bundle arguments = new Bundle();
        arguments.putString(ARGUMENT_MENU_TAG, menuTag);
        arguments.putString(ARGUMENT_GAME_ID, gameId);

        fragment.setArguments(arguments);
        return fragment;
    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);

        mActivity = (SettingsActivityView) context;
        mPresenter.onAttach();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setRetainInstance(true);
        String menuTag = getArguments().getString(ARGUMENT_MENU_TAG);
        String gameId = getArguments().getString(ARGUMENT_GAME_ID);

        mAdapter = new SettingsAdapter(this, getActivity());

        mPresenter.onCreate(menuTag, gameId);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_settings, container, false);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        LinearLayoutManager manager = new LinearLayoutManager(getActivity());

        RecyclerView recyclerView = view.findViewById(R.id.list_settings);

        recyclerView.setAdapter(mAdapter);
        recyclerView.setLayoutManager(manager);
        recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), null));

        SettingsActivityView activity = (SettingsActivityView) getActivity();

        mPresenter.onViewCreated(activity.getSettings());
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mActivity = null;

        if (mAdapter != null) {
            mAdapter.closeDialog();
        }
    }

    @Override
    public void onSettingsFileLoaded(Settings settings) {
        mPresenter.setSettings(settings);
    }

    @Override
    public void passSettingsToActivity(Settings settings) {
        if (mActivity != null) {
            mActivity.setSettings(settings);
        }
    }

    @Override
    public void showSettingsList(ArrayList<SettingsItem> settingsList) {
        mAdapter.setSettings(settingsList);
    }

    @Override
    public void loadDefaultSettings() {
        mPresenter.loadDefaultSettings();
    }

    @Override
    public void loadSubMenu(String menuKey) {
        mActivity.showSettingsFragment(menuKey, true, getArguments().getString(ARGUMENT_GAME_ID));
    }

    @Override
    public void showToastMessage(String message, boolean is_long) {
        mActivity.showToastMessage(message, is_long);
    }

    @Override
    public void putSetting(Setting setting) {
        mPresenter.putSetting(setting);
    }

    @Override
    public void onSettingChanged() {
        mActivity.onSettingChanged();
    }
}